/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package src;

import GUI.RadioStationJFrame;
import Interfaces.ApparentModalI;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * static μέθοδοι για φαινομενική modal λειτουργία
 *
 * 
 */
public class ApparentModalC {

    private ApparentModalC() {
    }
    private static boolean modalStart = false;

    //Σε περίπτωση ενεργοποίησης του παραθύρου (από οπουδήποτε) συγκεντρώνει όλα τα παράθυρα της εφαρμογής κλάσης Frame
    //συνεχόμενα με την προκαθορισμένη σειρά πάνω-πάνω στην z-order
    private static void modalOnWindowActivated(Frame w) {
        Frame adam = w, temp = w, next = ((ApparentModalI)w).getNext();
        try {
            if (!modalStart) {
                while (temp != null) {
                    adam = temp;
                    temp = ((ApparentModalI) adam).getCaller();
                }
                if (w != adam) {
                    modalStart = true;
                    adam.setState(Frame.NORMAL);
                    adam.toFront();
                     
                } else if (next != null) {
                    modalStart = true;
                    next.setState(Frame.NORMAL);
                    next.toFront();
                } 
            } else if (next == null) {
                modalStart = false;
            } else {
                next.setState(Frame.NORMAL);
                next.toFront();
            }
        } catch (Exception e) {
            modalStart = false;
            if (next != null) {
                next.setState(Frame.NORMAL);
                next.toFront();
            } else {
                w.setState(Frame.NORMAL);
                w.toFront();
            }
        }
    }
    private static boolean listenerAdded = false;

    //Εμφανίζει τα παράθυρα της εφαρμογής σε φαινομενική modal λειτουργία
    //Προσθέτει τους απαραίτητους listeners
    public static void modalSetNextVisible(Frame caller, Frame next) {
        ((ApparentModalI) caller).setNext(next);
        if (caller instanceof RadioStationJFrame && !listenerAdded) {
            listenerAdded = true;
            caller.addWindowListener(new WindowAdapter() {
                public void windowActivated(WindowEvent e) {
                    modalOnWindowActivated(caller);
                }
            });
        }
        next.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {

                ((ApparentModalI) caller).setNext(null);
                caller.setEnabled(true);
            }

            public void windowOpened(WindowEvent e) {
                caller.setEnabled(false);
            }

            public void windowActivated(WindowEvent e) {
                modalOnWindowActivated(next);
            }

        });
        next.setVisible(true);
    }
}
